package com.example.oracle.controller;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class RestResult<T> {
    /**
     * 1.status状态值：代表本次请求response的状态结果。
     */
    private Integer status;
    /**
     * 2.response描述：对本次状态码的描述。
     */
    private String message;

    /**
     * 3.response描述；对本次异常信息的描述
     */
    private String errorMessage;
    /**
     * 3.data数据：本次返回的数据。
     */
    private T data;

    /**
     * 成功，创建ResResult：没data数据
     */
    public static RestResult suc() {
        RestResult result = new RestResult();
        result.setResultCode(ResultCode.SUCCESS);
        return result;
    }

    /**
     * 成功，创建ResResult：有data数据
     */
    public static RestResult suc(Object data) {
        RestResult result = new RestResult();
        result.setResultCode(ResultCode.SUCCESS);
        result.setData(data);
        return result;
    }

    /**
     * 失败，指定status、desc
     */
    public static RestResult fail(Integer status, String desc, String errorMessage) {
        RestResult result = new RestResult();
        result.setStatus(status);
        result.setMessage(desc);
        result.setErrorMessage(errorMessage);
        return result;
    }

    /**
     * 失败，指定ResultCode枚举
     */
    public static RestResult fail(ResultCode resultCode) {
        RestResult result = new RestResult();
        result.setResultCode(resultCode);
        return result;
    }

    /**
     * 把ResultCode枚举转换为ResResult
     */
    private void setResultCode(ResultCode code) {
        this.status = code.code();
        this.message = code.message();
    }
}
